package avicit.im.lantop.archiveclassmanager.service;

import avicit.platform6.commons.utils.web.TreeNode;

import java.util.List;
import java.util.Map;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：路永刚</p>
 * <p>邮箱：luyg@avicit.com</p>
 * <p>创建时间： 2014-9-24 上午9:12:33 </p>
 * <p>类说明：档案分类树接口定义</p>
 * <p>修改记录： </p>
 */
public interface ArchiveClassManagerIntfsService {

	/**
	 * 获取档案分类树信息（单条记录）
	 * @author 路永刚
	 * @param id
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getArchiveClassListInfoByIntfs(String id) throws Exception;

	/**
	 * 获取档案分类树信息：按照档案类型（多个用英文逗号隔开）、节点类型来获取（多个用英文逗号隔开）
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @param archiveType
	 * @param archiveClassNodeType
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getArchiveClassListInfoByIntfs(String orgId, String deptId, String archiveType, String archiveClassNodeType) throws Exception;

	/**
	 * 获取档案分类树中所给节点的上一级制定物理表的节点信息
	 * @author 路永刚
	 * @param archiveClassId
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getArchiveClassListParentNodeInfoForTableByIntfs(String archiveClassId) throws Exception;

	/**
	 * 获取档案分类树信息：列表展示（文件夹、模板、数据节点、物理表）
	 * @author 路永刚
	 * @param 组织ID
	 * @param deptId
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getArchiveClassListInfoToTableByIntfs(String orgId, String deptId) throws Exception;

	/**
	 * 获取档案分类树信息：树形展示（文件夹、模板、数据节点、物理表）
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToTableInfoByIntfs(String orgId, String deptId) throws Exception;

	/**
	 * 获取档案分类树信息，通过节点路径向上+向下查找：树形展示（文件夹、模板、数据节点）
	 * @author 路永刚
	 * @param nodePath
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfs(String nodePath) throws Exception;

	/**
	 * 获取档案分类树信息：树形展示（文件夹、模板、数据节点）
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfs(String orgId, String deptId) throws Exception;

	/**
	 * 获取档案分类树信息：树形展示（文件夹、模板）
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToTemplateInfoByIntfs(String orgId, String deptId) throws Exception;

	/**
	 * 获取档案分类树指定的‘档案类型’信息：树形展示（文件夹、模板、数据节点）
	 * 根节点显示所传递档案类型对应的名称；
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @param archiveType
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfs(String orgId, String deptId, String sysId, String archiveType, Map<String, Object> params) throws Exception;
	/**
	 * 获取档案分类树指定的‘档案类型’信息：树形展示（文件夹、模板、数据节点）
	 * 根节点显示所传递档案类型对应的名称；整理归档专用
	 * @author 无量
	 * @param orgId
	 * @param deptId
	 * @param archiveType
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfsforZLGD(String orgId, String deptId, String sysId, String archiveType, Map<String, Object> params) throws Exception;

	/**
	 * @Title: getArchiveClassTreeNodeToDataNodeInfoByIntfsToStatics
	 * @Description: 统计使用的树，只显示到档案类型级 (不需要数据节点)
	 * @param [orgId, deptId, sysId, archiveType, params]
	 * @return java.util.List<avicit.platform6.commons.utils.web.TreeNode>
	 * @date 2019-05-08
	 * @author HuangJian
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfsToStatics(String orgId, String deptId, String sysId, String archiveType, Map<String, Object> params) throws Exception;



	/**
	 * 根据父节点id找到子节点数据
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param archiveType
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public List<Map<String,Object>> getArchivesPlanMaintainNode(String orgId, String deptId, String sysId, String archiveType, Map<String, Object> params) throws Exception;
	/**
	 * 创建档案分类树节点信息
	 * @author 路永刚
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeName
	 * @param parentNodePath
	 * @param nodeType
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String createArchiveClassByIntfs(String orgId, String deptId, String sysId, String nodeName, String parentNodePath, String nodeType, String loginUserId, String loginIp)
			throws Exception;

	/**
	 * 删除指定的档案分类树节点信息
	 * @author 路永刚
	 * @param id
	 * @throws Exception void
	 * @throws
	 */
	public void deleteArchiveClassByIntfs(String orgId, String deptId, String sysId, String id) throws Exception;

	/**
	 * 删除文件管理冗余树节点数据
	 * @author 钟一华
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param param [key:FILE_TYPE 文件类型	value: (个人文件/部门文件, GRWJ/BMWJ)]
	 * @throws Exception void
	 */
	public void deleteRedundancyTreeData(String orgId, String deptId, String sysId, Map<String, Object> param) throws Exception;

	/**
	 * 通过数据节点id获取树结构数据(向上查)
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param param (key: NODE_ID 数据节点id)
	 * @return
	 * @throws Exception
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeByIntfs(String orgId, String deptId, String sysId, Map<String, Object> param) throws Exception;

	/**
	 * 查询档案分类树信息
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> getArchiveClassDataByParam(Map<String, Object> param) throws Exception;

	/**
	 * 通过id 获取 模版数据信息集合
	 * @param id
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getModelData(String id) throws Exception;

	/**
	 * 通过模板文件夹ID获取数据节点集合
	 * @param id
	 * @return
	 * @throws Exception List<String>
	 * @throws
	 */
	public List<String> getDataNodeBytableInfoId(String id) throws Exception;

	/**
	 * 根据查询条件返回查询树形结果
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param param
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToSearchByIntfs(String orgId, String deptId, String sysId, Map<String, Object> param) throws Exception;

	/**
	 * 通过节点集合返回数据节点信息
	 * @param nodeId
	 * @return
	 * @throws Exception Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getDataNodeInfoByParam(Map<String, Object> param) throws Exception;

	/**
	 * 根据所传节点集合追加树节点
	 * @param tns
	 * @param param
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getAppendTreeNodeByParamTreeList(List<TreeNode> tns, Map<String, Object> param) throws Exception;

	/**
	 * 获取档案分类树结构(只包含到模板文件夹)
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param archiveType
	 * @param param
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeByArchiveTypeToModelFolder(String orgId, String deptId, String sysId, String archiveType, Map<String, Object> param) throws Exception;

	/**
	 * 获取选中节点和节点下子节点数据
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param id
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getSelectNodeChild(String orgId, String deptId, String sysId, String id) throws Exception;

	/**
	 * 根据sql语句获取档案分类树信息集合
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param condition
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getLantopArchiveClassByCondition(String orgId, String deptId, String sysId, String condition) throws Exception;

	/**
	 * 根据tableId获取模板文件夹节点信息
	 * @param nodeId
	 * @return
	 * @throws Exception List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String,Object>> getArchiveClassTreeNodeByTableId(String tableId) throws Exception;


	/**
	 * 根据nodeId获取模版文件夹名称
	 * @author 郭亮
	 * @param nodeId
	 * @return
	 * @throws Exception String
	 */
	public String getModelFileNameByNodeId(String nodeId) throws Exception;

	/**
	 * @throws Exception
	 * 获取档案分类树指定的‘档案类型’信息：树形展示（文件夹、模板、数据节点）
	 * 根节点显示所传递档案类型对应的名称；
	 * @author 郭凯
	 * @param orgId
	 * @param deptId
	 * @param archiveType
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToDataNodeInfoByIntfss(String orgId, String deptId, String sysIdStr, String string,Map<String, Object> param) throws Exception;

	/**
	 * @Description 判断是否为管理类文书类节点
	 * @return
	 * @Author zcl
	 * @Date 2020/1/9 14:03
	 **/
    public String isClericalClassTreeNode(String nodeId, String orgId, String tableId);
}
